﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApp
{
    //定义委托 （由此可见，委托是一种类型（类））
    public delegate void Mydelegate(int i, int x);

    public class DelegateClass
    {
        public void Show()
        {
            //声明委托
            Mydelegate mydelegate = new Mydelegate(Test1);
            mydelegate.Invoke(1, 1);//会开始调用，打印i+x=2
            mydelegate(1, 2);//会开始调用，打印i+x=2  缩写版

            //也可以异步调用（由此可见多线程基于委托）
             mydelegate.BeginInvoke(1,3,null,null);
            Console.WriteLine("到了这里了");
        }

        private void Test1(int i, int x)
        {
            Thread.Sleep(1000);//休息1秒钟
            Console.WriteLine($"i+x={i + x}");
        }
    }
}
